<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="generator" content="ApiGen; http://apigen.org" />
	<meta name="robots" content="noindex" />

	<title>Application\Routers\MultiRouter.php</title>

	<link rel="stylesheet" href="resources/style.css?v=2011071314" type="text/css" media="all" />
	<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
	<link rel="search" href="opensearch.xml" type="application/opensearchdescription+xml" title="Nette Framework API documentation" />
	<script type="text/javascript" src="resources/combined.js"></script>
	<script type="text/javascript" src="allclasses.js"></script>
</head>

<body>
<div id="left">
	<a href="allclasses.html">All Classes</a>

	<h3>Namespaces</h3>
	<ul>
		<li><a href="namespace-none.html">none</a>
		</li>
		<li><a href="namespace-Nette.html">Nette</a>
		</li>
		<li class="active"><a href="namespace-Nette.Application.html">Nette\Application</a>
		</li>
		<li><a href="namespace-Nette.Caching.html">Nette\Caching</a>
		</li>
		<li><a href="namespace-Nette.Collections.html">Nette\Collections</a>
		</li>
		<li><a href="namespace-Nette.Config.html">Nette\Config</a>
		</li>
		<li><a href="namespace-Nette.Forms.html">Nette\Forms</a>
		</li>
		<li><a href="namespace-Nette.IO.html">Nette\IO</a>
		</li>
		<li><a href="namespace-Nette.Loaders.html">Nette\Loaders</a>
		</li>
		<li><a href="namespace-Nette.Mail.html">Nette\Mail</a>
		</li>
		<li><a href="namespace-Nette.Reflection.html">Nette\Reflection</a>
		</li>
		<li><a href="namespace-Nette.Security.html">Nette\Security</a>
		</li>
		<li><a href="namespace-Nette.Templates.html">Nette\Templates</a>
		</li>
		<li><a href="namespace-Nette.Web.html">Nette\Web</a>
		</li>
		<li><a href="namespace-PHP.html">PHP</a>
		</li>
	</ul>

	<hr />

	<h3>Classes</h3>

	<ul>
		<li><a href="Nette.Application.AppForm.html">AppForm</a></li>
		<li><a href="Nette.Application.Application.html">Application</a></li>
		<li><a href="Nette.Application.CliRouter.html">CliRouter</a></li>
		<li><a href="Nette.Application.Control.html">Control</a></li>
		<li><a href="Nette.Application.DownloadResponse.html">DownloadResponse</a></li>
		<li><a href="Nette.Application.ForwardingResponse.html">ForwardingResponse</a></li>
		<li><a href="Nette.Application.JsonResponse.html">JsonResponse</a></li>
		<li><a href="Nette.Application.Link.html">Link</a></li>
		<li class="active"><a href="Nette.Application.MultiRouter.html">MultiRouter</a></li>
		<li><a href="Nette.Application.Presenter.html">Presenter</a></li>
		<li><a href="Nette.Application.PresenterComponent.html">PresenterComponent</a></li>
		<li><a href="Nette.Application.PresenterLoader.html">PresenterLoader</a></li>
		<li><a href="Nette.Application.PresenterRequest.html">PresenterRequest</a></li>
		<li><a href="Nette.Application.RedirectingResponse.html">RedirectingResponse</a></li>
		<li><a href="Nette.Application.RenderResponse.html">RenderResponse</a></li>
		<li><a href="Nette.Application.Route.html">Route</a></li>
		<li><a href="Nette.Application.SimpleRouter.html">SimpleRouter</a></li>
	</ul>

	<h3>Interfaces</h3>

	<ul>
		<li><a href="Nette.Application.IPartiallyRenderable.html">IPartiallyRenderable</a></li>
		<li><a href="Nette.Application.IPresenter.html">IPresenter</a></li>
		<li><a href="Nette.Application.IPresenterLoader.html">IPresenterLoader</a></li>
		<li><a href="Nette.Application.IPresenterResponse.html">IPresenterResponse</a></li>
		<li><a href="Nette.Application.IRenderable.html">IRenderable</a></li>
		<li><a href="Nette.Application.IRouter.html">IRouter</a></li>
		<li><a href="Nette.Application.ISignalReceiver.html">ISignalReceiver</a></li>
		<li><a href="Nette.Application.IStatePersistent.html">IStatePersistent</a></li>
	</ul>

	<h3>Exceptions</h3>

	<ul>
		<li><a href="Nette.Application.AbortException.html">AbortException</a></li>
		<li><a href="Nette.Application.ApplicationException.html">ApplicationException</a></li>
		<li><a href="Nette.Application.BadRequestException.html">BadRequestException</a></li>
		<li><a href="Nette.Application.BadSignalException.html">BadSignalException</a></li>
		<li><a href="Nette.Application.ForbiddenRequestException.html">ForbiddenRequestException</a></li>
		<li><a href="Nette.Application.InvalidLinkException.html">InvalidLinkException</a></li>
		<li><a href="Nette.Application.InvalidPresenterException.html">InvalidPresenterException</a></li>
	</ul>
</div>

<div id="right">
	<form action="http://www.google.com/cse" id="search" onsubmit="if(this.q.value.indexOf('more:')==-1)this.q.value+=' more:api'">
		<input type="hidden" name="cx" value="011549293477758430224:vxofa9ufnhc" /><input type="hidden" name="ie" value="UTF-8" /><input type="text" name="q" class="text" /><input type="submit" value="Search" />
	</form>

<div id="navigation">
	<ul>
		<li><a href="overview.html" title="Summary of all namespaces">Overview</a></li>
		<li><a href="elements.html">Elements</a></li>
	</ul>
</div>

<pre><code><a href="#1" id="1" class="l">  1: </a><span class="xlang">&lt;?php</span>
<a href="#2" id="2" class="l">  2: </a>
<a href="#3" id="3" class="l">  3: </a><span class="php-comment">/**
</span><a href="#4" id="4" class="l">  4: </a><span class="php-comment"> * This file is part of the Nette Framework (http://nette.org)
</span><a href="#5" id="5" class="l">  5: </a><span class="php-comment"> *
</span><a href="#6" id="6" class="l">  6: </a><span class="php-comment"> * Copyright (c) 2004, 2010 David Grudl (http://davidgrudl.com)
</span><a href="#7" id="7" class="l">  7: </a><span class="php-comment"> *
</span><a href="#8" id="8" class="l">  8: </a><span class="php-comment"> * For the full copyright and license information, please view
</span><a href="#9" id="9" class="l">  9: </a><span class="php-comment"> * the file license.txt that was distributed with this source code.
</span><a href="#10" id="10" class="l"> 10: </a><span class="php-comment"> */</span>
<a href="#11" id="11" class="l"> 11: </a>
<a href="#12" id="12" class="l"> 12: </a><span class="php-keyword1">namespace</span> Nette\Application;
<a href="#13" id="13" class="l"> 13: </a>
<a href="#14" id="14" class="l"> 14: </a><span class="php-keyword1">use</span> Nette;
<a href="#15" id="15" class="l"> 15: </a>
<a href="#16" id="16" class="l"> 16: </a>
<a href="#17" id="17" class="l"> 17: </a>
<a href="#18" id="18" class="l"> 18: </a><span class="php-comment">/**
</span><a href="#19" id="19" class="l"> 19: </a><span class="php-comment"> * The router broker.
</span><a href="#20" id="20" class="l"> 20: </a><span class="php-comment"> *
</span><a href="#21" id="21" class="l"> 21: </a><span class="php-comment"> * @author     David Grudl
</span><a href="#22" id="22" class="l"> 22: </a><span class="php-comment"> */</span>
<a href="#23" id="23" class="l"> 23: </a><span class="php-keyword1">class</span> MultiRouter <span class="php-keyword1">extends</span> Nette\Collections\ArrayList <span class="php-keyword1">implements</span> IRouter
<a href="#24" id="24" class="l"> 24: </a>{
<a href="#25" id="25" class="l"> 25: </a>    <span class="php-comment">/** @var array */</span>
<a href="#26" id="26" class="l"> 26: </a>    <span class="php-keyword1">private</span> <span class="php-var">$cachedRoutes</span>;
<a href="#27" id="27" class="l"> 27: </a>
<a href="#28" id="28" class="l"> 28: </a>
<a href="#29" id="29" class="l"> 29: </a>
<a href="#30" id="30" class="l"> 30: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> __construct()
<a href="#31" id="31" class="l"> 31: </a>    {
<a href="#32" id="32" class="l"> 32: </a>        parent::__construct(<span class="php-keyword1">NULL</span>, <span class="php-quote">'Nette\Application\IRouter'</span>);
<a href="#33" id="33" class="l"> 33: </a>    }
<a href="#34" id="34" class="l"> 34: </a>
<a href="#35" id="35" class="l"> 35: </a>
<a href="#36" id="36" class="l"> 36: </a>
<a href="#37" id="37" class="l"> 37: </a>    <span class="php-comment">/**
</span><a href="#38" id="38" class="l"> 38: </a><span class="php-comment">     * Maps HTTP request to a PresenterRequest object.
</span><a href="#39" id="39" class="l"> 39: </a><span class="php-comment">     * @param  Nette\Web\IHttpRequest
</span><a href="#40" id="40" class="l"> 40: </a><span class="php-comment">     * @return PresenterRequest|NULL
</span><a href="#41" id="41" class="l"> 41: </a><span class="php-comment">     */</span>
<a href="#42" id="42" class="l"> 42: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> match(Nette\Web\IHttpRequest <span class="php-var">$httpRequest</span>)
<a href="#43" id="43" class="l"> 43: </a>    {
<a href="#44" id="44" class="l"> 44: </a>        <span class="php-keyword1">foreach</span> (<span class="php-var">$this</span> as <span class="php-var">$route</span>) {
<a href="#45" id="45" class="l"> 45: </a>            <span class="php-var">$appRequest</span> = <span class="php-var">$route</span>-&gt;match(<span class="php-var">$httpRequest</span>);
<a href="#46" id="46" class="l"> 46: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$appRequest</span> !== <span class="php-keyword1">NULL</span>) {
<a href="#47" id="47" class="l"> 47: </a>                <span class="php-keyword1">return</span> <span class="php-var">$appRequest</span>;
<a href="#48" id="48" class="l"> 48: </a>            }
<a href="#49" id="49" class="l"> 49: </a>        }
<a href="#50" id="50" class="l"> 50: </a>        <span class="php-keyword1">return</span> <span class="php-keyword1">NULL</span>;
<a href="#51" id="51" class="l"> 51: </a>    }
<a href="#52" id="52" class="l"> 52: </a>
<a href="#53" id="53" class="l"> 53: </a>
<a href="#54" id="54" class="l"> 54: </a>
<a href="#55" id="55" class="l"> 55: </a>    <span class="php-comment">/**
</span><a href="#56" id="56" class="l"> 56: </a><span class="php-comment">     * Constructs absolute URL from PresenterRequest object.
</span><a href="#57" id="57" class="l"> 57: </a><span class="php-comment">     * @param  Nette\Web\IHttpRequest
</span><a href="#58" id="58" class="l"> 58: </a><span class="php-comment">     * @param  PresenterRequest
</span><a href="#59" id="59" class="l"> 59: </a><span class="php-comment">     * @return string|NULL
</span><a href="#60" id="60" class="l"> 60: </a><span class="php-comment">     */</span>
<a href="#61" id="61" class="l"> 61: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> constructUrl(PresenterRequest <span class="php-var">$appRequest</span>, Nette\Web\IHttpRequest <span class="php-var">$httpRequest</span>)
<a href="#62" id="62" class="l"> 62: </a>    {
<a href="#63" id="63" class="l"> 63: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;cachedRoutes === <span class="php-keyword1">NULL</span>) {
<a href="#64" id="64" class="l"> 64: </a>            <span class="php-var">$routes</span> = <span class="php-keyword1">array</span>();
<a href="#65" id="65" class="l"> 65: </a>            <span class="php-var">$routes</span>[<span class="php-quote">'*'</span>] = <span class="php-keyword1">array</span>();
<a href="#66" id="66" class="l"> 66: </a>
<a href="#67" id="67" class="l"> 67: </a>            <span class="php-keyword1">foreach</span> (<span class="php-var">$this</span> as <span class="php-var">$route</span>) {
<a href="#68" id="68" class="l"> 68: </a>                <span class="php-var">$presenter</span> = <span class="php-var">$route</span> <span class="php-keyword1">instanceof</span> Route ? <span class="php-var">$route</span>-&gt;getTargetPresenter() : <span class="php-keyword1">NULL</span>;
<a href="#69" id="69" class="l"> 69: </a>
<a href="#70" id="70" class="l"> 70: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$presenter</span> === <span class="php-keyword1">FALSE</span>) <span class="php-keyword1">continue</span>;
<a href="#71" id="71" class="l"> 71: </a>
<a href="#72" id="72" class="l"> 72: </a>                <span class="php-keyword1">if</span> (<span class="php-keyword2">is_string</span>(<span class="php-var">$presenter</span>)) {
<a href="#73" id="73" class="l"> 73: </a>                    <span class="php-var">$presenter</span> = <span class="php-keyword2">strtolower</span>(<span class="php-var">$presenter</span>);
<a href="#74" id="74" class="l"> 74: </a>                    <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$routes</span>[<span class="php-var">$presenter</span>])) {
<a href="#75" id="75" class="l"> 75: </a>                        <span class="php-var">$routes</span>[<span class="php-var">$presenter</span>] = <span class="php-var">$routes</span>[<span class="php-quote">'*'</span>];
<a href="#76" id="76" class="l"> 76: </a>                    }
<a href="#77" id="77" class="l"> 77: </a>                    <span class="php-var">$routes</span>[<span class="php-var">$presenter</span>][] = <span class="php-var">$route</span>;
<a href="#78" id="78" class="l"> 78: </a>
<a href="#79" id="79" class="l"> 79: </a>                } <span class="php-keyword1">else</span> {
<a href="#80" id="80" class="l"> 80: </a>                    <span class="php-keyword1">foreach</span> (<span class="php-var">$routes</span> as <span class="php-var">$id</span> =&gt; <span class="php-var">$foo</span>) {
<a href="#81" id="81" class="l"> 81: </a>                        <span class="php-var">$routes</span>[<span class="php-var">$id</span>][] = <span class="php-var">$route</span>;
<a href="#82" id="82" class="l"> 82: </a>                    }
<a href="#83" id="83" class="l"> 83: </a>                }
<a href="#84" id="84" class="l"> 84: </a>            }
<a href="#85" id="85" class="l"> 85: </a>
<a href="#86" id="86" class="l"> 86: </a>            <span class="php-var">$this</span>-&gt;cachedRoutes = <span class="php-var">$routes</span>;
<a href="#87" id="87" class="l"> 87: </a>        }
<a href="#88" id="88" class="l"> 88: </a>
<a href="#89" id="89" class="l"> 89: </a>        <span class="php-var">$presenter</span> = <span class="php-keyword2">strtolower</span>(<span class="php-var">$appRequest</span>-&gt;getPresenterName());
<a href="#90" id="90" class="l"> 90: </a>        <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$this</span>-&gt;cachedRoutes[<span class="php-var">$presenter</span>])) <span class="php-var">$presenter</span> = <span class="php-quote">'*'</span>;
<a href="#91" id="91" class="l"> 91: </a>
<a href="#92" id="92" class="l"> 92: </a>        <span class="php-keyword1">foreach</span> (<span class="php-var">$this</span>-&gt;cachedRoutes[<span class="php-var">$presenter</span>] as <span class="php-var">$route</span>) {
<a href="#93" id="93" class="l"> 93: </a>            <span class="php-var">$uri</span> = <span class="php-var">$route</span>-&gt;constructUrl(<span class="php-var">$appRequest</span>, <span class="php-var">$httpRequest</span>);
<a href="#94" id="94" class="l"> 94: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$uri</span> !== <span class="php-keyword1">NULL</span>) {
<a href="#95" id="95" class="l"> 95: </a>                <span class="php-keyword1">return</span> <span class="php-var">$uri</span>;
<a href="#96" id="96" class="l"> 96: </a>            }
<a href="#97" id="97" class="l"> 97: </a>        }
<a href="#98" id="98" class="l"> 98: </a>
<a href="#99" id="99" class="l"> 99: </a>        <span class="php-keyword1">return</span> <span class="php-keyword1">NULL</span>;
<a href="#100" id="100" class="l">100: </a>    }
<a href="#101" id="101" class="l">101: </a>
<a href="#102" id="102" class="l">102: </a>}
<a href="#103" id="103" class="l">103: </a></code></pre>

	<div id="footer">
		Nette Framework API documentation generated by <a href="http://apigen.org">ApiGen</a>
	</div>
</div>
</body>
</html>
